package com.accounting.juanjuan.exception;

import org.springframework.lang.NonNull;

/**
 * 系统级异常
 * <p>
 * 系统使用过程中，对于无法预知的数据环境，网络环境等抛出的异常，该种异常用户无法读懂，需要开发人员介入处理的。<br/>
 * 例如：空指针异常，数据库连接超时异常等。
 * 注意：继承自RuntimeException运行时异常。
 * </p>
 */
public class AppException extends RuntimeException {
    private static final long serialVersionUID = 8953803096265544686L;
    private int errCode;
    private String errText;

    public AppException(@NonNull String errText) {
        super(errText);
        //-1:指示错误未知名类型
        this.errCode = -1;
        this.errText = errText;
    }

    public AppException(int errCode, @NonNull String errText) {
        this(errText + "(" + errCode + ")");
        this.errCode = errCode;
        this.errText = errText;
    }

    public AppException(Throwable cause) {
        super(cause);
        //-1:指示错误未知名类型
        this.errCode = -1;
        this.errText = cause.getMessage();
    }

    public AppException(@NonNull String errText, Throwable cause) {
        super(errText, cause);
        //-1:指示错误未知名类型
        this.errCode = -1;
        this.errText = errText;
    }

    public AppException(int errCode, @NonNull String errText, Throwable cause) {
        super(errText + "(" + errCode + ")", cause);
        //-1:指示错误未知名类型
        this.errCode = errCode;
        this.errText = errText;
    }

    public int getErrCode() {
        return errCode;
    }

    public String getErrText() {
        return errText;
    }

    @Override
    public String toString() {
        return "AppException{" +
                "errCode=" + errCode +
                ", errText='" + errText + '\'' +
                '}';
    }
}
